package CoteServeur;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.Socket;
import java.util.HashMap;


public class Reception implements Runnable {
	 
    private BufferedReader in;
    private String message = null, login = null;
    private ControleurServeur controleur;
    private String typeRecu; 
    private Socket socket;
    
    
    public Reception(BufferedReader in, String login, ControleurServeur cont, String typeRecu, Socket socket){
         
        this.in = in;
        this.login = login;
        controleur = cont;
        this.typeRecu = typeRecu;
        this.socket = socket;

    }
     
    public void run() {
         
		try {
			message = in.readLine(); 				// lecture du type
			
			if(message.equals("connect")){
				
				controleur.setTypeCmd(message);
				message = in.readLine();
				System.out.println("message de connexion : " + message);
			}
			if(message.equals("mess") || message.equals("inscr") || message.equals("addContact") || message.equals("infContact") || message.equals("deco") || message.equals("chgmtStatut") || message.equals("actuCont") || message.equals("modifMdp"))
			{
				typeRecu = message;
				message = in.readLine();
			}
			else{
				typeRecu = controleur.getTypeCmd();
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		}
        //while(true){
			if(message.equals("")){
				System.out.println("message vide our erreur");
				//break;
			}
			else
			{
				if(typeRecu.equals("mess")){
					boolean quitter = false;
					while(!quitter) {
						System.out.println("Reception d'un message, envoie en cour ..............");
						System.out.println(message);
						controleur.envoieMess(message, socket);
						try {
							message = in.readLine();
							quitter = !message.equals("mess");
							message = in.readLine();
							quitter = !message.equals("quitter");
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					//break;
//                try {
//                    
//                    message = in.readLine();
//                    System.out.println(login+" : "+message);
//                    controleur.setMessage(message);
//                    
//                    if(message!= null || message != ""){
//                    	Vector<Socket> vec = controleur.getVecOut();
//                    	System.out.println(vec);	
//                        for(int i = 0; i< vec.size();i++)
//                        {
//                        	PrintWriter out = new PrintWriter(vec.get(i).getOutputStream());
//                        	Thread t4 = new Thread(new Emission(out, message));
//                            t4.start();	    
//                            }  
//                        }
//                     
//                    } catch (IOException e) {
//                         
//                        e.printStackTrace();
//                    }
				}
				else if(typeRecu.equals("inscr"))
				{
					System.out.println("Nous receptionnons une demande d'inscription");
        			System.out.println("Message reçu : " + message);
    				if(message.equals("null"))
    				{
    					System.out.println( "il y a un probleme ici");
    				}
    				else
    				{
    					controleur.setTypeCmd(null);
    					controleur.inscrireUtilisateur(message, socket);
    					
    					//break;
    				}
				}
				else if(typeRecu.equals("connect"))
				{
					System.out.println("tentative de connexion verification en cours ..............");
					controleur.validerConnexion(message, socket);
					//break;
				}
				else if(typeRecu.equals("deco")){
					controleur.deconnexion(message, socket);
					socket = null;
					//break;
				}
				else if(typeRecu.equals("addContact")){
					controleur.addContact(message, socket);
					//break;
				}
				else if(typeRecu.equals("infContact")) {
					controleur.infContact(message, socket);
					//break;
				}
				else if (typeRecu.equals("chgmtStatut")){
					controleur.changerStatut(message,socket);
					//break;
				}
				else if (typeRecu.equals("actuCont")){
					controleur.actuCont(message,socket);
					//break;
				}
				else if (typeRecu.equals("modifMdp")){
					controleur.modifMdp(message,socket);
					//break;
				}
				else
				{
            		System.out.println("Type non reconnu.");
            		System.out.println("type recu : " + typeRecu);
            		System.out.println("message recu : " + message);
            		//break;
				}
			}
      //  }
    }

}

